package com.xunchi.haichuan.user.service;

import java.util.Date;
import java.util.List;

import com.xunchi.haichuan.user.model.User;

/**
 * 作者：kongxb<br>
 * 模块名称：用户模块<br>
 * 功能描述：用户服务接口<br>
 * 维护记录：
 */
public interface UserService {

	/**
	 * 根据用户名、密码获取用户
	 * 
	 * @param loginName
	 * @param loginPassword
	 * @return User
	 * @throws Exception
	 */
	public User getUser(String loginName, String loginPassword) throws Exception;

	/**
	 * 通过名字、密码、类型获取用户
	 * 
	 * @param loginName
	 * @param loginPassword
	 * @param type
	 * @return
	 * @throws Exception
	 */
	public User getUser(String loginName, String loginPassword, int type) throws Exception;

	/**
	 * 添加用户
	 * 
	 * @param loginName
	 * @param loginPassword
	 * @param userName
	 * @param email
	 * @param status
	 * @param type
	 * @throws Exception
	 */
	public void addUser(String loginName, String loginPassword, String userName, String email, int status, int type)
			throws Exception;

	/**
	 * 按照用户登录名查找用户是否存在
	 * 
	 * @param loginName
	 * @return true 该用户存在, false 该用户不存在
	 * @throws Exception
	 */
	public boolean checkLoginName(String loginName) throws Exception;

	/**
	 * 添加用户与角色关系信息
	 * 
	 * @param usrId
	 * @param permissionId
	 * @throws Exception
	 */
	public void addUserPermission(String usrId, String permissionId) throws Exception;

	/**
	 * 删除用户与角色关系信息
	 * 
	 * @param usrId
	 * @param permissionId
	 * @throws Exception
	 */
	public void deleteUserPermission(String usrId, String permissionId) throws Exception;

	/**
	 * 按用户类型获取用户列表
	 * 
	 * @param type
	 *            0：超级管理员 1：管理员 2：代理商 3：普通用户
	 * @return
	 * @throws Exception
	 */
	public List<User> getByType(int type) throws Exception;

	/**
	 * 获取一个用户下的用户列表
	 * 
	 * @param parentId
	 * @return
	 * @throws Exception
	 */
	public List<User> getChildren(String parentId) throws Exception;

	/**
	 * 按用户ID更改用户状态
	 * 
	 * @param usrId
	 * @param status
	 * @return
	 * @throws Exception
	 */
	public void changeStatus(String usrId, int status) throws Exception;

	/**
	 * 校验原密码并按用户ID更改原密码
	 * 
	 * @param usrId
	 * @param password
	 * @param oldPassword
	 * @return
	 * @throws Exception
	 */
	public int changePwd(String usrId, String password, String oldPassword) throws Exception;

	/**
	 * 充值/扣费
	 * 
	 * @param usrId
	 * @param diff
	 * @return
	 * @throws Exception
	 */
	public void charge(String usrId, float diff) throws Exception;

	/**
	 * 根据ID获取用户
	 * 
	 * @param usrId
	 * @return
	 * @throws Exception
	 */
	public User getUserById(String usrId) throws Exception;

	/**
	 * 按照用户ID和权限ID查找该用户对应的权限是否存在
	 * 
	 * @param usrId
	 * @param permissionId
	 * @return true 该权限存在, false 该权限不存在
	 * @throws Exception
	 */
	public boolean checkPermission(String usrId, String permissionId) throws Exception;

	/**
	 * 按照用户ID获取对应的权限
	 * 
	 * @param usrId
	 * @return
	 * @throws Exception
	 */
	public List<String> getPermissions(String usrId) throws Exception;

	/**
	 * 搜索用户
	 * 
	 * @param params
	 * @param beginDate
	 * @param endDate
	 * @return
	 * @throws Exception
	 */
	public List<User> search(Object[] params, Date beginDate, Date endDate) throws Exception;

	/**
	 * 搜索用户
	 * 
	 * @param params
	 * @param beginDate
	 * @param endDate
	 * @param start
	 * @param limit
	 * @return
	 * @throws Exception
	 */
	public List<User> search(Object[] params, Date beginDate, Date endDate, int start, int limit) throws Exception;

	/**
	 * 按照提交时间将用户List逆序排序
	 * 
	 * @param userList
	 */
	public void sortUserList(List<User> userList);

	/**
	 * 获取列表总数
	 * 
	 * @return
	 */
	public int getTotalCount();

}
